package leetcode2;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class test6 {
    public List<List<Integer>> threeSum(int[] nums) {
         List<List<Integer>> res = new ArrayList<>();
        Arrays.sort(nums);

//         for(int k = 0;k < nums.length - 2;k++){
//             int i = k + 1;
//             int j = nums.length - 1;
//             if(nums[k] > 0)
//                 break;
//             if(k > 0 && nums[k] == nums[k - 1]) continue;
//             while (i < j){
//                 int index = nums[k] + nums[i] + nums[j];
//                 if(index > 0){
////                     j--;
//                     while (i < j && nums[j] == nums[--j]);
//                 } else if (index < 0) {
////                     i++;
//                     while (i < j && nums[i] == nums[++i]);
//                 }else {
//                     res.add(new ArrayList<Integer>(Arrays.asList(nums[k],nums[i],nums[j])));
//                     while (i < j && nums[i] == nums[++i]);
//                     while (i < j && nums[j] == nums[--j]);
//                 }
//             }
//         }
        int k = 0;
        while (k <= nums.length - 3) {
            int i = k + 1;
            int j = nums.length - 1;
            if (nums[k] > 0)
                break;
            if (k > 0 && nums[k] == nums[k - 1]) {
                k++;
                continue;
            }
            while (i < j) {
                int index = nums[k] + nums[i] + nums[j];
                if (index > 0) {
                    while (i < j && nums[j] == nums[--j]);
                } else if (index < 0) {
                    while (i < j && nums[i] == nums[++i]);
                } else {
                    res.add(new ArrayList<Integer>(Arrays.asList(nums[k], nums[i], nums[j])));
                    while (i < j && nums[i] == nums[++i]);
                    while (i < j && nums[j] == nums[--j]);
                }
            }
            k++;
        }
         return res;
    }


}
